﻿<%@ page contentType="text/html;charset=utf-8"%><%@page import="java.io.*,
	java.io.*,
	java.util.*,
	java.net.*,
	javax.xml.parsers.*,
	org.apache.xml.serialize.*,
	javax.xml.transform.*,
	javax.xml.transform.dom.*,
	javax.xml.transform.stream.*,
	org.w3c.dom.*"%><%!

	// (메모리상의)XML 문서를 파일로 쓰기.
	// Input: XML 문서의 Root Element
	//        파일이 생성될 경로
	// Output: 없음.
	void writeXMLFile(Element rootElement, String filePath) throws Exception {
		XMLSerializer serializer = new XMLSerializer();
		serializer.setOutputByteStream(new FileOutputStream ( filePath ));
		serializer.serialize(rootElement);
	}

	// REST 방식의 OpenAPI 호출.
	// Output: XML Stream
	InputStream callOpenAPI() throws Exception {
		InputStream ret = null;

		// daum blog search
		String OPEN_API_URL = "http://openapi.naver.com/search";
		String API_KEY = "1e588d866d140b4255e2d2b94290e43b";
		
		String serviceURL = OPEN_API_URL + "?key=" + API_KEY + "&target=rank&query=news";

		// 디버깅용: 호출 URL 콘솔창에 출력.
		System.out.println("serviceURL-[" + serviceURL + "]");
		
		URL requestUrl = new URL(serviceURL);
		ret = requestUrl.openConnection().getInputStream();

		return ret;
	}

	// XML 문서 파싱.
	// Input: XML Stream
	// Output: XML 문서의 Root Element.
	Element parseDocument(InputStream is) throws Exception {
		Element ret = null;

		// 파서(Parser) 생성.
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setIgnoringElementContentWhitespace(true);
		DocumentBuilder builder = factory.newDocumentBuilder();

		// XML 문서 파싱.
		Document document = builder.parse(is);

		ret = document.getDocumentElement();

		// 디버깅용.
		// XML 파일 생성하기.
		writeXMLFile(ret, "c:/realrank.xml");

		return ret;
	}
%><%
	request.setCharacterEncoding("UTF-8");
	response.setContentType("text/html;charset=UTF-8");
%>
	<table border=1>
		<tr><td>keyword</td><td>순위</td></tr>
<%
		InputStream is = callOpenAPI();
		Element rootElement = parseDocument(is);

		//<item>
		//	<R1>
		//		<K>김규식</K>
		//		<S>+</S>
		//		<V>944</V>
		//	</R1>
		//</item>
		Node item = rootElement.getElementsByTagName("item").item(0);
		NodeList rList = item.getChildNodes();
		int count = rList.getLength();
		for(int i = 0; i < count; i++) {
			Node r = rList.item(i);
			Node k = ((Element)r).getElementsByTagName("K").item(0).getChildNodes().item(0);
			Node s = ((Element)r).getElementsByTagName("S").item(0).getChildNodes().item(0);
			Node v = ((Element)r).getElementsByTagName("V").item(0).getChildNodes().item(0);
%>
			<tr><td><%=k.getNodeValue()%></td>
			<td>
<%
			if ("+".equals(s.getNodeValue())) {
				out.println("상승 " + v.getNodeValue() + "계단");
			}
			else if ("-".equals(s.getNodeValue())) {
				out.println("하락 " + v.getNodeValue() + "계단");
			}
			else {
				out.println("신규 진입");
			}
%>
			</td></tr>
<%
		} //end-of-'for'
%>
	</table>
